gpu/internal/driver: introduce and use FeatureSRGB

No functional changes; a follow-up will implement graceful fallback in
the compute renderer.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-07-28 14:29:42 +02:00
parent b3a8c24334
commit 970fadf852
4 changed files with 10 additions and 4 deletions
+4
View File
@@ -9,6 +9,7 @@ package gpu
import (
"encoding/binary"
"errors"
"fmt"
"image"
"image/color"
@@ -360,6 +361,9 @@ func New(api API) (GPU, error) {
defer d.EndFrame()
forceCompute := os.Getenv("GIORENDERER") == "forcecompute"
feats := d.Caps().Features
if !feats.Has(driver.FeatureSRGB) {
return nil, errors.New("gpu: no sRGB texture formats found")
}
switch {
case !forceCompute && feats.Has(driver.FeatureFloatRenderTargets):
return newGPU(d)
+1
View File
@@ -128,6 +128,7 @@ func newDirect3D11Device(api driver.Direct3D11) (driver.Device, error) {
ctx: dev.GetImmediateContext(),
caps: driver.Caps{
MaxTextureSize: 2048, // 9.1 maximum
Features: driver.FeatureSRGB,
},
depthStates: make(map[depthState]*d3d11.DepthStencilState),
blendStates: make(map[blendState]*d3d11.BlendState),
+1
View File
@@ -212,6 +212,7 @@ const (
FeatureTimers Features = 1 << iota
FeatureFloatRenderTargets
FeatureCompute
FeatureSRGB
)
const (
+4 -4
View File
@@ -182,10 +182,7 @@ func newOpenGLDevice(api driver.OpenGL) (driver.Device, error) {
return nil, err
}
floatTriple, ffboErr := floatTripleFor(f, ver, exts)
srgbaTriple, err := srgbaTripleFor(ver, exts)
if err != nil {
return nil, err
}
srgbaTriple, srgbErr := srgbaTripleFor(ver, exts)
gles30 := gles && ver[0] >= 3
gles31 := gles && (ver[0] > 3 || (ver[0] == 3 && ver[1] >= 1))
gl40 := !gles && ver[0] >= 4
@@ -199,6 +196,9 @@ func newOpenGLDevice(api driver.OpenGL) (driver.Device, error) {
srgbaTriple: srgbaTriple,
}
b.feats.BottomLeftOrigin = true
if srgbErr == nil {
b.feats.Features |= driver.FeatureSRGB
}
if ffboErr == nil {
b.feats.Features |= driver.FeatureFloatRenderTargets
}