Remove SDL_HAVE_YUV checks from render drivers

This doesn't actually save much code size and complicates the drivers a fair bit.

Upside is that you'll now be able to build SDL without software YUV support and still be able to play videos with hardware acceleration enabled.
This commit is contained in:
Sam Lantinga
2026-09-10 08:39:00 -07:00
parent b7606be372
commit 21f4bc47b6
16 changed files with 12 additions and 229 deletions

View File

@@ -2468,7 +2468,6 @@ bool SDL_UpdateYUVTexture(SDL_Texture *texture, const SDL_Rect *rect,
const Uint8 *Uplane, int Upitch,
const Uint8 *Vplane, int Vpitch)
{
#ifdef SDL_HAVE_YUV
SDL_Renderer *renderer;
SDL_Rect real_rect;
@@ -2513,9 +2512,12 @@ bool SDL_UpdateYUVTexture(SDL_Texture *texture, const SDL_Rect *rect,
return true; // nothing to do.
}
#ifdef SDL_HAVE_YUV
if (texture->yuv) {
return SDL_UpdateTextureYUVPlanar(texture, &real_rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch);
} else {
} else
#endif
{
SDL_assert(!texture->native);
renderer = texture->renderer;
SDL_assert(renderer->UpdateTextureYUV);
@@ -2528,16 +2530,12 @@ bool SDL_UpdateYUVTexture(SDL_Texture *texture, const SDL_Rect *rect,
return SDL_Unsupported();
}
}
#else
return false;
#endif
}
bool SDL_UpdateNVTexture(SDL_Texture *texture, const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
const Uint8 *UVplane, int UVpitch)
{
#ifdef SDL_HAVE_YUV
SDL_Renderer *renderer;
SDL_Rect real_rect;
@@ -2574,9 +2572,12 @@ bool SDL_UpdateNVTexture(SDL_Texture *texture, const SDL_Rect *rect,
return true; // nothing to do.
}
#ifdef SDL_HAVE_YUV
if (texture->yuv) {
return SDL_UpdateTextureNVPlanar(texture, &real_rect, Yplane, Ypitch, UVplane, UVpitch);
} else {
} else
#endif
{
SDL_assert(!texture->native);
renderer = texture->renderer;
SDL_assert(renderer->UpdateTextureNV);
@@ -2589,9 +2590,6 @@ bool SDL_UpdateNVTexture(SDL_Texture *texture, const SDL_Rect *rect,
return SDL_Unsupported();
}
}
#else
return false;
#endif
}
#ifdef SDL_HAVE_YUV

View File

@@ -252,7 +252,6 @@ struct SDL_Renderer
bool (*UpdateTexture)(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, const void *pixels,
int pitch);
#ifdef SDL_HAVE_YUV
bool (*UpdateTextureYUV)(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -262,7 +261,6 @@ struct SDL_Renderer
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
const Uint8 *UVplane, int UVpitch);
#endif
bool (*LockTexture)(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch);
void (*UnlockTexture)(SDL_Renderer *renderer, SDL_Texture *texture);

View File

@@ -104,7 +104,6 @@ typedef struct
const float *shader_params;
float palette_shader_params[4];
#ifdef SDL_HAVE_YUV
// YV12 texture support
bool yuv;
D3D_TextureRep utexture;
@@ -112,7 +111,6 @@ typedef struct
Uint8 *pixels;
int pitch;
SDL_Rect locked_rect;
#endif
} D3D_TextureData;
typedef struct
@@ -628,7 +626,6 @@ static bool D3D_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
if (!D3D_UpdateTextureRep(data->device, &texturedata->texture, rect->x, rect->y, rect->w, rect->h, pixels, pitch)) {
return false;
}
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
if (texture->format == SDL_PIXELFORMAT_I444) {
// Skip to the correct offset into the next texture
@@ -656,7 +653,6 @@ static bool D3D_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
}
}
}
#endif
return true;
}
@@ -690,7 +686,6 @@ static bool D3D_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
texturedata->palette_shader_params[2] = texture->w;
texturedata->palette_shader_params[3] = texture->h;
}
#ifdef SDL_HAVE_YUV
if (texture->format == SDL_PIXELFORMAT_YV12 ||
texture->format == SDL_PIXELFORMAT_IYUV) {
texturedata->yuv = true;
@@ -726,7 +721,6 @@ static bool D3D_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
return SDL_SetError("Unsupported YUV colorspace");
}
}
#endif
return true;
}
@@ -742,7 +736,6 @@ static bool D3D_RecreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (!D3D_RecreateTextureRep(data->device, &texturedata->texture)) {
return false;
}
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
if (!D3D_RecreateTextureRep(data->device, &texturedata->utexture)) {
return false;
@@ -752,11 +745,9 @@ static bool D3D_RecreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
return false;
}
}
#endif
return true;
}
#ifdef SDL_HAVE_YUV
static bool D3D_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -790,7 +781,6 @@ static bool D3D_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
}
return true;
}
#endif
static bool D3D_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)
@@ -802,7 +792,6 @@ static bool D3D_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
if (!texturedata) {
return SDL_SetError("Texture is not currently available");
}
#ifdef SDL_HAVE_YUV
texturedata->locked_rect = *rect;
if (texturedata->yuv) {
@@ -823,7 +812,6 @@ static bool D3D_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
rect->x * SDL_BYTESPERPIXEL(texture->format));
*pitch = texturedata->pitch;
} else
#endif
{
RECT d3drect;
D3DLOCKED_RECT locked;
@@ -856,7 +844,6 @@ static void D3D_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (!texturedata) {
return;
}
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
const SDL_Rect *rect = &texturedata->locked_rect;
void *pixels =
@@ -864,7 +851,6 @@ static void D3D_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
rect->x * SDL_BYTESPERPIXEL(texture->format));
D3D_UpdateTexture(renderer, texture, rect, pixels, texturedata->pitch);
} else
#endif
{
IDirect3DTexture9_UnlockRect(texturedata->texture.staging, 0);
texturedata->texture.dirty = true;
@@ -1117,10 +1103,8 @@ static bool SetupTextureState(D3D_RenderData *data, SDL_Texture *texture, SDL_Sc
} else {
*shader = SHADER_PALETTE_NEAREST;
}
#ifdef SDL_HAVE_YUV
} else if (texturedata->yuv) {
*shader = SHADER_YUV;
#endif // SDL_HAVE_YUV
}
*shader_params = texturedata->shader_params;
@@ -1133,7 +1117,6 @@ static bool SetupTextureState(D3D_RenderData *data, SDL_Texture *texture, SDL_Sc
return false;
}
}
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
if (!BindTextureRep(data->device, &texturedata->utexture, 1)) {
return false;
@@ -1142,7 +1125,6 @@ static bool SetupTextureState(D3D_RenderData *data, SDL_Texture *texture, SDL_Sc
return false;
}
}
#endif
return true;
}
@@ -1165,12 +1147,10 @@ static bool SetDrawState(D3D_RenderData *data, const SDL_RenderCommand *cmd)
((oldtexturedata && data->drawstate.texture->palette) || data->drawstate.texture_state_dirty)) {
IDirect3DDevice9_SetTexture(data->device, 1, NULL);
}
#ifdef SDL_HAVE_YUV
if ((!newtexturedata || !newtexturedata->yuv) && ((oldtexturedata && oldtexturedata->yuv) || data->drawstate.texture_state_dirty)) {
IDirect3DDevice9_SetTexture(data->device, 1, NULL);
IDirect3DDevice9_SetTexture(data->device, 2, NULL);
}
#endif
if (texture && !SetupTextureState(data, texture, cmd->data.draw.texture_scale_mode, &shader, &shader_params)) {
return false;
}
@@ -1204,12 +1184,10 @@ static bool SetDrawState(D3D_RenderData *data, const SDL_RenderCommand *cmd)
D3D_PaletteData *palettedata = (D3D_PaletteData *)texture->palette->internal;
UpdateDirtyTexture(data->device, &palettedata->texture);
}
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
UpdateDirtyTexture(data->device, &texturedata->utexture);
UpdateDirtyTexture(data->device, &texturedata->vtexture);
}
#endif // SDL_HAVE_YUV
}
}
@@ -1217,7 +1195,6 @@ static bool SetDrawState(D3D_RenderData *data, const SDL_RenderCommand *cmd)
UpdateTextureScaleMode(data, cmd->data.draw.texture_scale_mode, 0);
UpdateTextureAddressMode(data, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v, 0);
#ifdef SDL_HAVE_YUV
D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal;
if (texturedata && texturedata->yuv) {
UpdateTextureScaleMode(data, cmd->data.draw.texture_scale_mode, 1);
@@ -1225,7 +1202,6 @@ static bool SetDrawState(D3D_RenderData *data, const SDL_RenderCommand *cmd)
UpdateTextureAddressMode(data, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v, 1);
UpdateTextureAddressMode(data, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v, 2);
}
#endif // SDL_HAVE_YUV
}
if (blend != data->drawstate.blend) {
@@ -1678,12 +1654,10 @@ static void D3D_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (texture->palette) {
IDirect3DDevice9_SetTexture(renderdata->device, 1, NULL);
}
#ifdef SDL_HAVE_YUV
if (data && data->yuv) {
IDirect3DDevice9_SetTexture(renderdata->device, 1, NULL);
IDirect3DDevice9_SetTexture(renderdata->device, 2, NULL);
}
#endif
}
if (!data) {
@@ -1691,11 +1665,9 @@ static void D3D_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
}
D3D_DestroyTextureRep(&data->texture);
#ifdef SDL_HAVE_YUV
D3D_DestroyTextureRep(&data->utexture);
D3D_DestroyTextureRep(&data->vtexture);
SDL_free(data->pixels);
#endif
SDL_free(data);
texture->internal = NULL;
}
@@ -1913,9 +1885,7 @@ static bool D3D_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
renderer->DestroyPalette = D3D_DestroyPalette;
renderer->CreateTexture = D3D_CreateTexture;
renderer->UpdateTexture = D3D_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = D3D_UpdateTextureYUV;
#endif
renderer->LockTexture = D3D_LockTexture;
renderer->UnlockTexture = D3D_UnlockTexture;
renderer->SetRenderTarget = D3D_SetRenderTarget;
@@ -2046,13 +2016,11 @@ static bool D3D_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
data->shaders[SHADER_PALETTE_LINEAR]) {
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_INDEX8);
}
#ifdef SDL_HAVE_YUV
if (caps.MaxSimultaneousTextures >= 3 && data->shaders[SHADER_YUV]) {
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_I444);
}
#endif
SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_D3D9_DEVICE_POINTER, data->device);

View File

@@ -128,7 +128,6 @@ typedef struct
int lockedTexturePositionX;
int lockedTexturePositionY;
const float *YCbCr_matrix;
#ifdef SDL_HAVE_YUV
// YV12 texture support
bool yuv;
ID3D11Texture2D *mainTextureU;
@@ -143,7 +142,6 @@ typedef struct
Uint8 *pixels;
int pitch;
SDL_Rect locked_rect;
#endif
} D3D11_TextureData;
// Blend mode data
@@ -1272,7 +1270,6 @@ static bool D3D11_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
}
SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER, textureData->mainTexture);
#ifdef SDL_HAVE_YUV
if (texture->format == SDL_PIXELFORMAT_YV12 ||
texture->format == SDL_PIXELFORMAT_IYUV ||
texture->format == SDL_PIXELFORMAT_I0FL) {
@@ -1364,7 +1361,6 @@ static bool D3D11_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
return SDL_SetError("Unsupported YUV colorspace");
}
}
#endif // SDL_HAVE_YUV
SDL_zero(resourceViewDesc);
resourceViewDesc.Format = SDLPixelFormatToDXGIMainResourceViewFormat(texture->format, renderer->output_colorspace);
resourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
@@ -1378,7 +1374,6 @@ static bool D3D11_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
return WIN_SetErrorFromHRESULT("ID3D11Device1::CreateShaderResourceView", result);
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv) {
result = ID3D11Device_CreateShaderResourceView(rendererData->d3dDevice,
(ID3D11Resource *)textureData->mainTextureU,
@@ -1413,7 +1408,6 @@ static bool D3D11_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
return WIN_SetErrorFromHRESULT("ID3D11Device1::CreateShaderResourceView", result);
}
}
#endif // SDL_HAVE_YUV
if (texture->access & SDL_TEXTUREACCESS_TARGET) {
D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc;
@@ -1447,14 +1441,12 @@ static void D3D11_DestroyTexture(SDL_Renderer *renderer,
SAFE_RELEASE(data->mainTextureResourceView);
SAFE_RELEASE(data->mainTextureRenderTargetView);
SAFE_RELEASE(data->stagingTexture);
#ifdef SDL_HAVE_YUV
SAFE_RELEASE(data->mainTextureU);
SAFE_RELEASE(data->mainTextureResourceViewU);
SAFE_RELEASE(data->mainTextureV);
SAFE_RELEASE(data->mainTextureResourceViewV);
SAFE_RELEASE(data->mainTextureResourceViewNV);
SDL_free(data->pixels);
#endif
SDL_free(data);
texture->internal = NULL;
}
@@ -1562,7 +1554,6 @@ static bool D3D11_UpdateTextureInternal(D3D11_RenderData *rendererData, ID3D11Te
return true;
}
#ifdef SDL_HAVE_YUV
static bool D3D11_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -1573,7 +1564,6 @@ static bool D3D11_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const Uint8 *Yplane, int Ypitch,
const Uint8 *Uplane, int Upitch,
const Uint8 *Vplane, int Vpitch);
#endif
static bool D3D11_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, const void *srcPixels,
@@ -1586,7 +1576,6 @@ static bool D3D11_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
return SDL_SetError("Texture is not currently available");
}
#ifdef SDL_HAVE_YUV
if (textureData->nv12) {
int UVbpp = SDL_BYTESPERPIXEL(texture->format) * 2;
int Ypitch = srcPitch;
@@ -1623,7 +1612,6 @@ static bool D3D11_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
}
}
}
#endif
if (!D3D11_UpdateTextureInternal(rendererData, textureData->mainTexture, SDL_BYTESPERPIXEL(texture->format), rect->x, rect->y, rect->w, rect->h, srcPixels, srcPitch)) {
return false;
@@ -1631,7 +1619,6 @@ static bool D3D11_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
return true;
}
#ifdef SDL_HAVE_YUV
static bool D3D11_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -1779,7 +1766,6 @@ static bool D3D11_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
return true;
}
#endif
static bool D3D11_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)
@@ -1793,7 +1779,6 @@ static bool D3D11_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
if (!textureData) {
return SDL_SetError("Texture is not currently available");
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv || textureData->nv12) {
// It's more efficient to upload directly...
if (!textureData->pixels) {
@@ -1814,7 +1799,6 @@ static bool D3D11_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
*pitch = textureData->pitch;
return true;
}
#endif
if (textureData->stagingTexture) {
return SDL_SetError("texture is already locked");
}
@@ -1874,7 +1858,6 @@ static void D3D11_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (!textureData) {
return;
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv || textureData->nv12) {
const SDL_Rect *rect = &textureData->locked_rect;
void *pixels =
@@ -1883,7 +1866,6 @@ static void D3D11_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
D3D11_UpdateTexture(renderer, texture, rect, pixels, textureData->pitch);
return;
}
#endif
// Commit the pixel buffer's changes back to the staging texture:
ID3D11DeviceContext_Unmap(rendererData->d3dContext,
(ID3D11Resource *)textureData->stagingTexture,
@@ -2590,14 +2572,12 @@ static bool D3D11_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *
++numShaderSamplers;
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv) {
shaderResources[numShaderResources++] = textureData->mainTextureResourceViewU;
shaderResources[numShaderResources++] = textureData->mainTextureResourceViewV;
} else if (textureData->nv12) {
shaderResources[numShaderResources++] = textureData->mainTextureResourceViewNV;
}
#endif // SDL_HAVE_YUV
return D3D11_SetDrawState(renderer, cmd, &constants, numShaderResources, shaderResources, numShaderSamplers, shaderSamplers, matrix);
}
@@ -3011,10 +2991,8 @@ static bool D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
renderer->DestroyPalette = D3D11_DestroyPalette;
renderer->CreateTexture = D3D11_CreateTexture;
renderer->UpdateTexture = D3D11_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = D3D11_UpdateTextureYUV;
renderer->UpdateTextureNV = D3D11_UpdateTextureNV;
#endif
renderer->LockTexture = D3D11_LockTexture;
renderer->UnlockTexture = D3D11_UnlockTexture;
renderer->SetRenderTarget = D3D11_SetRenderTarget;

View File

@@ -127,7 +127,6 @@ typedef struct
ID3D12Resource *stagingBuffer;
D3D12_RESOURCE_STATES stagingResourceState;
const float *YCbCr_matrix;
#ifdef SDL_HAVE_YUV
// YV12 texture support
bool yuv;
ID3D12Resource *mainTextureU;
@@ -146,7 +145,6 @@ typedef struct
Uint8 *pixels;
int pitch;
#endif
SDL_Rect lockedRect;
} D3D12_TextureData;
@@ -1691,7 +1689,6 @@ static bool D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
textureData->mainResourceState = D3D12_RESOURCE_STATE_COPY_DEST;
SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER, textureData->mainTexture);
#ifdef SDL_HAVE_YUV
if (texture->format == SDL_PIXELFORMAT_YV12 ||
texture->format == SDL_PIXELFORMAT_IYUV ||
texture->format == SDL_PIXELFORMAT_I0FL) {
@@ -1805,7 +1802,6 @@ static bool D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
return SDL_SetError("Unsupported YUV colorspace");
}
}
#endif // SDL_HAVE_YUV
SDL_zero(resourceViewDesc);
resourceViewDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
resourceViewDesc.Format = SDLPixelFormatToDXGIMainResourceViewFormat(texture->format, renderer->output_colorspace);
@@ -1821,7 +1817,6 @@ static bool D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
&resourceViewDesc,
textureData->mainTextureResourceView);
#ifdef SDL_HAVE_YUV
if (textureData->yuv) {
D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewU);
textureData->mainSRVIndexU = D3D12_GetAvailableSRVIndex(renderer);
@@ -1858,7 +1853,6 @@ static bool D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
&nvResourceViewDesc,
textureData->mainTextureResourceViewNV);
}
#endif // SDL_HAVE_YUV
if (texture->access & SDL_TEXTUREACCESS_TARGET) {
D3D12_RENDER_TARGET_VIEW_DESC renderTargetViewDesc;
@@ -1896,7 +1890,6 @@ static void D3D12_DestroyTexture(SDL_Renderer *renderer,
D3D_SAFE_RELEASE(textureData->mainTexture);
D3D_SAFE_RELEASE(textureData->stagingBuffer);
D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndex);
#ifdef SDL_HAVE_YUV
D3D_SAFE_RELEASE(textureData->mainTextureU);
D3D_SAFE_RELEASE(textureData->mainTextureV);
if (textureData->yuv) {
@@ -1907,7 +1900,6 @@ static void D3D12_DestroyTexture(SDL_Renderer *renderer,
D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndexNV);
}
SDL_free(textureData->pixels);
#endif
SDL_free(textureData);
texture->internal = NULL;
}
@@ -2064,7 +2056,6 @@ static bool D3D12_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 0, rect->x, rect->y, rect->w, rect->h, srcPixels, srcPitch, &textureData->mainResourceState)) {
return false;
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv) {
if (texture->format == SDL_PIXELFORMAT_I444 || texture->format == SDL_PIXELFORMAT_I4FL) {
// Skip to the correct offset into the next texture
@@ -2109,7 +2100,6 @@ static bool D3D12_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
return false;
}
}
#endif // SDL_HAVE_YUV
if (textureData->mainTextureResourceView.ptr == rendererData->currentShaderResource.ptr) {
// We'll need to rebind this resource after updating it
rendererData->currentShaderResource.ptr = 0;
@@ -2117,7 +2107,6 @@ static bool D3D12_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
return true;
}
#ifdef SDL_HAVE_YUV
static bool D3D12_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -2180,7 +2169,6 @@ static bool D3D12_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
}
return true;
}
#endif
static bool D3D12_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)
@@ -2199,7 +2187,6 @@ static bool D3D12_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
if (!textureData) {
return SDL_SetError("Texture is not currently available");
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv || textureData->nv12) {
// It's more efficient to upload directly...
if (!textureData->pixels) {
@@ -2220,7 +2207,6 @@ static bool D3D12_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
*pitch = textureData->pitch;
return true;
}
#endif
if (textureData->stagingBuffer) {
return SDL_SetError("texture is already locked");
}
@@ -2322,7 +2308,6 @@ static void D3D12_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (!textureData) {
return;
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv || textureData->nv12) {
const SDL_Rect *rect = &textureData->lockedRect;
void *pixels =
@@ -2331,7 +2316,6 @@ static void D3D12_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
D3D12_UpdateTexture(renderer, texture, rect, pixels, textureData->pitch);
return;
}
#endif
// Commit the pixel buffer's changes back to the staging texture:
ID3D12Resource_Unmap(textureData->stagingBuffer, 0, NULL);
@@ -3071,7 +3055,6 @@ static bool D3D12_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *
shaderSamplers[numShaderSamplers++] = *textureSampler;
}
#ifdef SDL_HAVE_YUV
if (textureData->yuv) {
D3D12_TransitionResource(rendererData, textureData->mainTextureU, textureData->mainResourceStateU, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
textureData->mainResourceStateU = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
@@ -3085,7 +3068,6 @@ static bool D3D12_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *
textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
shaderResources[numShaderResources++] = textureData->mainTextureResourceViewNV;
}
#endif // SDL_HAVE_YUV
return D3D12_SetDrawState(renderer, cmd, &constants, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, numShaderResources, shaderResources, numShaderSamplers, shaderSamplers);
}
@@ -3612,10 +3594,8 @@ bool D3D12_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Proper
renderer->DestroyPalette = D3D12_DestroyPalette;
renderer->CreateTexture = D3D12_CreateTexture;
renderer->UpdateTexture = D3D12_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = D3D12_UpdateTextureYUV;
renderer->UpdateTextureNV = D3D12_UpdateTextureNV;
#endif
renderer->LockTexture = D3D12_LockTexture;
renderer->UnlockTexture = D3D12_UnlockTexture;
renderer->SetRenderTarget = D3D12_SetRenderTarget;

View File

@@ -141,7 +141,6 @@ typedef struct GPU_TextureData
int pitch;
SDL_Rect locked_rect;
const float *YCbCr_matrix;
#ifdef SDL_HAVE_YUV
// YV12 texture support
bool yuv;
bool external_texture_u;
@@ -153,7 +152,6 @@ typedef struct GPU_TextureData
bool nv12;
bool external_texture_nv;
SDL_GPUTexture *textureNV;
#endif
} GPU_TextureData;
// TODO: Sort this list based on what the GPU driver prefers?
@@ -325,7 +323,6 @@ static bool GPU_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
size_t size, pitch;
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
if (!SDL_CalculateYUVSize(texture->format, texture->w, texture->h, &size, &pitch)) {
SDL_free(data);
return false;
}
data->pitch = (int)pitch;
@@ -335,7 +332,6 @@ static bool GPU_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
}
data->pixels = SDL_calloc(1, size);
if (!data->pixels) {
SDL_free(data);
return false;
}
@@ -370,7 +366,6 @@ static bool GPU_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
SDL_PropertiesID props = SDL_GetTextureProperties(texture);
SDL_SetPointerProperty(props, SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER, data->texture);
#ifdef SDL_HAVE_YUV
if (texture->format == SDL_PIXELFORMAT_YV12 ||
texture->format == SDL_PIXELFORMAT_IYUV ||
texture->format == SDL_PIXELFORMAT_I0FL) {
@@ -469,7 +464,6 @@ static bool GPU_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
return SDL_SetError("Unsupported YUV colorspace");
}
}
#endif // SDL_HAVE_YUV
return true;
}
@@ -528,7 +522,6 @@ static bool GPU_UpdateTextureInternal(GPU_RenderData *renderdata, SDL_GPUCopyPas
return true;
}
#ifdef SDL_HAVE_YUV
static bool GPU_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -539,7 +532,6 @@ static bool GPU_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const Uint8 *Yplane, int Ypitch,
const Uint8 *Uplane, int Upitch,
const Uint8 *Vplane, int Vpitch);
#endif
static bool GPU_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch)
{
@@ -553,7 +545,6 @@ static bool GPU_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, cons
retval = GPU_UpdateTextureInternal(renderdata, cpass, data->texture, bpp, rect->x, rect->y, rect->w, rect->h, pixels, pitch);
#ifdef SDL_HAVE_YUV
if (data->nv12) {
const Uint8 *Yplane = (const Uint8 *)pixels;
const Uint8 *UVplane = Yplane + rect->h * pitch;
@@ -591,13 +582,11 @@ static bool GPU_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, cons
}
}
}
#endif
SDL_EndGPUCopyPass(cpass);
return retval;
}
#ifdef SDL_HAVE_YUV
static bool GPU_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -641,7 +630,6 @@ static bool GPU_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
SDL_EndGPUCopyPass(cpass);
return retval;
}
#endif // SDL_HAVE_YUV
static bool GPU_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)
@@ -989,12 +977,10 @@ static void CalculateAdvancedShaderConstants(SDL_Renderer *renderer, const SDL_R
constants->tonemap_factor2 = (1.0f / output_headroom);
}
#ifdef SDL_HAVE_YUV
GPU_TextureData *data = (GPU_TextureData *)texture->internal;
if (data->yuv || data->nv12) {
SDL_memcpy(constants->YCbCr_matrix, data->YCbCr_matrix, sizeof(constants->YCbCr_matrix));
}
#endif
}
static void Draw(
@@ -1085,7 +1071,6 @@ static void Draw(
sampler_bind.sampler = GetSampler(data, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
sampler_bind.texture = palette->texture;
SDL_BindGPUFragmentSamplers(pass, sampler_slot++, &sampler_bind, 1);
#ifdef SDL_HAVE_YUV
} else if (tdata->yuv) {
sampler_bind.texture = tdata->textureU;
SDL_BindGPUFragmentSamplers(pass, sampler_slot++, &sampler_bind, 1);
@@ -1094,7 +1079,6 @@ static void Draw(
} else if (tdata->nv12) {
sampler_bind.texture = tdata->textureNV;
SDL_BindGPUFragmentSamplers(pass, sampler_slot++, &sampler_bind, 1);
#endif
}
// We need to fill 3 sampler slots for the advanced shader
@@ -1597,7 +1581,6 @@ static void GPU_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (!data->external_texture) {
SDL_ReleaseGPUTexture(renderdata->device, data->texture);
}
#ifdef SDL_HAVE_YUV
if (!data->external_texture_u) {
SDL_ReleaseGPUTexture(renderdata->device, data->textureU);
}
@@ -1607,7 +1590,6 @@ static void GPU_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (!data->external_texture_nv) {
SDL_ReleaseGPUTexture(renderdata->device, data->textureNV);
}
#endif
SDL_free(data->pixels);
SDL_free(data);
texture->internal = NULL;
@@ -1760,10 +1742,8 @@ static bool GPU_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
renderer->DestroyPalette = GPU_DestroyPalette;
renderer->CreateTexture = GPU_CreateTexture;
renderer->UpdateTexture = GPU_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = GPU_UpdateTextureYUV;
renderer->UpdateTextureNV = GPU_UpdateTextureNV;
#endif
renderer->LockTexture = GPU_LockTexture;
renderer->UnlockTexture = GPU_UnlockTexture;
renderer->SetRenderTarget = GPU_SetRenderTarget;

View File

@@ -166,11 +166,9 @@ typedef struct METAL_ShaderPipelines
@property(nonatomic, retain) id<MTLTexture> mtltextureU;
@property(nonatomic, retain) id<MTLTexture> mtltextureV;
@property(nonatomic, assign) SDL_MetalFragmentFunction fragmentFunction;
#ifdef SDL_HAVE_YUV
@property(nonatomic, assign) BOOL yuv;
@property(nonatomic, assign) BOOL nv12;
@property(nonatomic, assign) size_t conversionBufferOffset;
#endif
@property(nonatomic, assign) BOOL hasdata;
@property(nonatomic, retain) id<MTLBuffer> lockedbuffer;
@property(nonatomic, assign) SDL_Rect lockedrect;
@@ -807,7 +805,6 @@ static bool METAL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
texturedata.mtltexture = mtltexture;
SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_METAL_TEXTURE_POINTER, (__bridge void *)mtltexture);
#ifdef SDL_HAVE_YUV
BOOL yuv = (texture->format == SDL_PIXELFORMAT_IYUV || texture->format == SDL_PIXELFORMAT_YV12 || texture->format == SDL_PIXELFORMAT_I444 || texture->format == SDL_PIXELFORMAT_I0FL || texture->format == SDL_PIXELFORMAT_I4FL);
BOOL nv12 = (texture->format == SDL_PIXELFORMAT_NV12 || texture->format == SDL_PIXELFORMAT_NV21 || texture->format == SDL_PIXELFORMAT_P010);
@@ -877,19 +874,15 @@ static bool METAL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_METAL_TEXTURE_UV_POINTER, (__bridge void *)mtltexture);
}
#endif // SDL_HAVE_YUV
if (texture->format == SDL_PIXELFORMAT_INDEX8) {
texturedata.fragmentFunction = SDL_METAL_FRAGMENT_PALETTE;
#ifdef SDL_HAVE_YUV
} else if (yuv) {
texturedata.fragmentFunction = SDL_METAL_FRAGMENT_YUV;
} else if (nv12) {
texturedata.fragmentFunction = SDL_METAL_FRAGMENT_NV12;
#endif
} else {
texturedata.fragmentFunction = SDL_METAL_FRAGMENT_COPY;
}
#ifdef SDL_HAVE_YUV
texturedata.yuv = yuv;
texturedata.nv12 = nv12;
if (yuv || nv12) {
@@ -899,7 +892,6 @@ static bool METAL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
}
texturedata.conversionBufferOffset = offset;
}
#endif
texture->internal = (void *)CFBridgingRetain(texturedata);
return true;
@@ -999,7 +991,6 @@ static bool METAL_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
if (!METAL_UpdateTextureInternal(renderer, texturedata.hasdata, texturedata.mtltexture, *rect, 0, pixels, pitch)) {
return false;
}
#ifdef SDL_HAVE_YUV
if (texturedata.yuv) {
// YV12 stores V before U, so the plane order is swapped for it.
id<MTLTexture> firstplane = texture->format == SDL_PIXELFORMAT_YV12 ? texturedata.mtltextureV : texturedata.mtltextureU;
@@ -1042,14 +1033,12 @@ static bool METAL_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
return false;
}
}
#endif
texturedata.hasdata = YES;
return true;
}
}
#ifdef SDL_HAVE_YUV
static bool METAL_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -1116,7 +1105,6 @@ static bool METAL_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
return true;
}
}
#endif
static bool METAL_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)
@@ -1131,13 +1119,11 @@ static bool METAL_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
return SDL_SetError("Invalid rectangle dimensions for LockTexture.");
}
#ifdef SDL_HAVE_YUV
if (texturedata.yuv || texturedata.nv12) {
if (!SDL_CalculateYUVSize(texture->format, rect->w, rect->h, &size, &calculated_pitch)) {
return false;
}
} else
#endif
{
calculated_pitch = SDL_BYTESPERPIXEL(texture->format) * rect->w;
size = rect->h * calculated_pitch;
@@ -1165,9 +1151,7 @@ static void METAL_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
id<MTLBlitCommandEncoder> blitcmd;
SDL_Rect rect = texturedata.lockedrect;
int pitch = SDL_BYTESPERPIXEL(texture->format) * rect.w;
#ifdef SDL_HAVE_YUV
SDL_Rect UVrect = { rect.x / 2, rect.y / 2, (rect.w + 1) / 2, (rect.h + 1) / 2 };
#endif
if (texturedata.lockedbuffer == nil) {
return;
@@ -1193,7 +1177,7 @@ static void METAL_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
destinationSlice:0
destinationLevel:0
destinationOrigin:MTLOriginMake(rect.x, rect.y, 0)];
#ifdef SDL_HAVE_YUV
if (texturedata.yuv) {
// YV12 stores V before U, so the plane order is swapped for it.
id<MTLTexture> firstplane = texture->format == SDL_PIXELFORMAT_YV12 ? texturedata.mtltextureV : texturedata.mtltextureU;
@@ -1236,7 +1220,6 @@ static void METAL_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
destinationLevel:0
destinationOrigin:MTLOriginMake(UVrect.x, UVrect.y, 0)];
}
#endif
[blitcmd endEncoding];
[data.mtlcmdbuffer commit];
@@ -1756,7 +1739,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c
SDL3METAL_PaletteData *palette = (__bridge SDL3METAL_PaletteData *)texture->palette->internal;
[data.mtlcmdencoder setFragmentTexture:palette.mtltexture atIndex:1];
}
#ifdef SDL_HAVE_YUV
if (texturedata.yuv || texturedata.nv12) {
if (texturedata.yuv) {
[data.mtlcmdencoder setFragmentTexture:texturedata.mtltextureU atIndex:1];
@@ -1766,7 +1748,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c
}
[data.mtlcmdencoder setFragmentBuffer:data.mtlbufconstants offset:texturedata.conversionBufferOffset atIndex:1];
}
#endif
statecache->texture = texture;
}
@@ -2589,10 +2570,8 @@ static bool METAL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
renderer->DestroyPalette = METAL_DestroyPalette;
renderer->CreateTexture = METAL_CreateTexture;
renderer->UpdateTexture = METAL_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = METAL_UpdateTextureYUV;
renderer->UpdateTextureNV = METAL_UpdateTextureNV;
#endif
renderer->LockTexture = METAL_LockTexture;
renderer->UnlockTexture = METAL_UnlockTexture;
renderer->SetRenderTarget = METAL_SetRenderTarget;

View File

@@ -150,7 +150,6 @@ typedef struct
void *pixels;
int pitch;
SDL_Rect locked_rect;
#ifdef SDL_HAVE_YUV
// YUV texture support
bool yuv;
bool nv12;
@@ -158,7 +157,6 @@ typedef struct
bool utexture_external;
GLuint vtexture;
bool vtexture_external;
#endif
SDL_ScaleMode texture_scale_mode;
SDL_TextureAddressMode texture_address_mode_u;
SDL_TextureAddressMode texture_address_mode_v;
@@ -696,7 +694,6 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
SetTextureScaleMode(renderdata, textype, texture->format, data->texture_scale_mode);
SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
#ifdef SDL_HAVE_YUV
if (texture->format == SDL_PIXELFORMAT_YV12 ||
texture->format == SDL_PIXELFORMAT_IYUV) {
data->yuv = true;
@@ -775,7 +772,6 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER, data->utexture);
}
#endif
if (texture->format == SDL_PIXELFORMAT_INDEX8) {
data->shader = SHADER_PALETTE_NEAREST;
@@ -790,7 +786,6 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
data->texel_size[2] = texture->w;
data->texel_size[3] = texture->h;
#ifdef SDL_HAVE_YUV
if (data->yuv || data->nv12) {
if (data->yuv) {
data->shader = SHADER_YUV;
@@ -812,7 +807,6 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
return SDL_SetError("Unsupported YUV colorspace");
}
}
#endif // SDL_HAVE_YUV
renderdata->glDisable(textype);
@@ -839,7 +833,6 @@ static bool GL_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
renderdata->glTexSubImage2D(textype, 0, rect->x, rect->y, rect->w,
rect->h, data->format, data->formattype,
pixels);
#ifdef SDL_HAVE_YUV
if (data->yuv) {
if (texture->format == SDL_PIXELFORMAT_I444) {
// Skip to the correct offset into the next texture
@@ -890,11 +883,9 @@ static bool GL_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
(rect->w + 1) / 2, (rect->h + 1) / 2,
GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, pixels);
}
#endif
return GL_CheckError("glTexSubImage2D()", renderer);
}
#ifdef SDL_HAVE_YUV
static bool GL_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -971,7 +962,6 @@ static bool GL_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
return GL_CheckError("glTexSubImage2D()", renderer);
}
#endif
static bool GL_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)
@@ -1304,7 +1294,6 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
SetDrawState(data, cmd, shader, shader_params);
if (texture != data->drawstate.texture) {
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
data->glActiveTextureARB(GL_TEXTURE2_ARB);
data->glBindTexture(textype, texturedata->vtexture);
@@ -1316,7 +1305,6 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
data->glActiveTextureARB(GL_TEXTURE1_ARB);
data->glBindTexture(textype, texturedata->utexture);
}
#endif
if (texture->palette) {
GL_PaletteData *palette = (GL_PaletteData *)texture->palette->internal;
data->glActiveTextureARB(GL_TEXTURE1_ARB);
@@ -1331,7 +1319,6 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
}
if (cmd->data.draw.texture_scale_mode != texturedata->texture_scale_mode) {
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
data->glActiveTextureARB(GL_TEXTURE2);
if (!SetTextureScaleMode(data, textype, texture->format, cmd->data.draw.texture_scale_mode)) {
@@ -1352,7 +1339,6 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
data->glActiveTextureARB(GL_TEXTURE0);
}
#endif
if (texture->palette) {
data->glActiveTextureARB(GL_TEXTURE1);
if (!SetTextureScaleMode(data, textype, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST)) {
@@ -1370,7 +1356,6 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
if (cmd->data.draw.texture_address_mode_u != texturedata->texture_address_mode_u ||
cmd->data.draw.texture_address_mode_v != texturedata->texture_address_mode_v) {
#ifdef SDL_HAVE_YUV
if (texturedata->yuv) {
data->glActiveTextureARB(GL_TEXTURE2);
SetTextureAddressMode(data, textype, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
@@ -1385,7 +1370,6 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
data->glActiveTextureARB(GL_TEXTURE0);
}
#endif
if (texture->palette) {
data->glActiveTextureARB(GL_TEXTURE1);
SetTextureAddressMode(data, textype, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
@@ -1746,7 +1730,6 @@ static void GL_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (data->texture && !data->texture_external) {
renderdata->glDeleteTextures(1, &data->texture);
}
#ifdef SDL_HAVE_YUV
if (data->yuv) {
if (!data->utexture_external) {
renderdata->glDeleteTextures(1, &data->utexture);
@@ -1760,7 +1743,6 @@ static void GL_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
renderdata->glDeleteTextures(1, &data->utexture);
}
}
#endif
SDL_free(data->pixels);
SDL_free(data);
texture->internal = NULL;
@@ -1878,10 +1860,8 @@ static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pr
renderer->DestroyPalette = GL_DestroyPalette;
renderer->CreateTexture = GL_CreateTexture;
renderer->UpdateTexture = GL_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = GL_UpdateTextureYUV;
renderer->UpdateTextureNV = GL_UpdateTextureNV;
#endif
renderer->LockTexture = GL_LockTexture;
renderer->UnlockTexture = GL_UnlockTexture;
renderer->SetRenderTarget = GL_SetRenderTarget;
@@ -2031,7 +2011,6 @@ static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pr
} else {
SDL_LogInfo(SDL_LOG_CATEGORY_RENDER, "OpenGL palette shaders not supported");
}
#ifdef SDL_HAVE_YUV
// We support YV12 textures using 3 textures and a shader
if (GL_SupportsShader(data->shaders, SHADER_YUV) &&
data->num_texture_units >= 3) {
@@ -2053,7 +2032,6 @@ static bool GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Pr
} else {
SDL_LogInfo(SDL_LOG_CATEGORY_RENDER, "OpenGL NV12/NV21 not supported");
}
#endif
#ifdef SDL_PLATFORM_MACOS
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_UYVY);
#endif

View File

@@ -443,7 +443,6 @@ static struct {
"#version 130\n"
},
#ifdef SDL_HAVE_YUV
// SHADER_YUV
{
// vertex shader
@@ -494,7 +493,6 @@ static struct {
// fragment version
NULL
},
#endif // SDL_HAVE_YUV
};
/* *INDENT-ON* */ // clang-format on
@@ -709,10 +707,8 @@ void GL_SelectShader(GL_ShaderContext *ctx, GL_Shader shader, const float *shade
shader == SHADER_RGB_PIXELART ||
shader == SHADER_RGBA_PIXELART) {
shader_params_len = 4 * sizeof(float);
#ifdef SDL_HAVE_YUV
} else if (shader >= SHADER_YUV) {
shader_params_len = 16 * sizeof(float);
#endif
}
SDL_assert(!shader_params || shader_params_len > 0);
@@ -729,7 +725,6 @@ void GL_SelectShader(GL_ShaderContext *ctx, GL_Shader shader, const float *shade
}
}
#ifdef SDL_HAVE_YUV
if (shader >= SHADER_YUV) {
// YUV shader params are Yoffset, 0, Rcoeff, 0, Gcoeff, 0, Bcoeff, 0
location = ctx->glGetUniformLocationARB(program, "Yoffset");
@@ -749,7 +744,6 @@ void GL_SelectShader(GL_ShaderContext *ctx, GL_Shader shader, const float *shade
ctx->glUniform3fARB(location, shader_params[12], shader_params[13], shader_params[14]);
}
}
#endif // SDL_HAVE_YUV
if (!ctx->shader_params[shader]) {
ctx->shader_params[shader] = (float *)SDL_malloc(shader_params_len);

View File

@@ -38,13 +38,11 @@ typedef enum
SHADER_RGB_PIXELART,
SHADER_RGBA,
SHADER_RGBA_PIXELART,
#ifdef SDL_HAVE_YUV
SHADER_YUV,
SHADER_NV12_RA,
SHADER_NV12_RG,
SHADER_NV21_RA,
SHADER_NV21_RG,
#endif
NUM_SHADERS
} GL_Shader;

View File

@@ -69,7 +69,6 @@ typedef struct
GLenum pixel_type;
void *pixel_data;
int pitch;
#ifdef SDL_HAVE_YUV
// YUV texture support
bool yuv;
bool nv12;
@@ -77,7 +76,6 @@ typedef struct
GLuint texture_v_external;
GLuint texture_u;
GLuint texture_u_external;
#endif
GLfloat texel_size[4];
SDL_ScaleMode texture_scale_mode;
SDL_TextureAddressMode texture_address_mode_u;
@@ -684,7 +682,6 @@ static bool GLES2_SelectProgram(GLES2_RenderData *data, SDL_Texture *texture, GL
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_BGR;
}
break;
#ifdef SDL_HAVE_YUV
case GLES2_IMAGESOURCE_TEXTURE_YUV:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV;
shader_params = SDL_GetYCbCRtoRGBConversionMatrix(colorspace, 0, 0, 8);
@@ -720,7 +717,6 @@ static bool GLES2_SelectProgram(GLES2_RenderData *data, SDL_Texture *texture, GL
}
shader_params_len = 16 * sizeof(float);
break;
#endif // SDL_HAVE_YUV
case GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES;
break;
@@ -770,7 +766,6 @@ static bool GLES2_SelectProgram(GLES2_RenderData *data, SDL_Texture *texture, GL
if (shader_params &&
(!program->shader_params ||
SDL_memcmp(shader_params, program->shader_params, shader_params_len) != 0)) {
#ifdef SDL_HAVE_YUV
if (ftype >= GLES2_SHADER_FRAGMENT_TEXTURE_YUV) {
// YUV shader params are Yoffset, 0, Rcoeff, 0, Gcoeff, 0, Bcoeff, 0
if (program->uniform_locations[GLES2_UNIFORM_OFFSET] != -1) {
@@ -792,7 +787,6 @@ static bool GLES2_SelectProgram(GLES2_RenderData *data, SDL_Texture *texture, GL
}
}
else
#endif
{
data->glUniform4f(program->uniform_locations[GLES2_UNIFORM_TEXEL_SIZE], shader_params[0], shader_params[1], shader_params[2], shader_params[3]);
}
@@ -1242,7 +1236,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
break;
}
break;
#ifdef SDL_HAVE_YUV
case SDL_PIXELFORMAT_IYUV:
case SDL_PIXELFORMAT_YV12:
case SDL_PIXELFORMAT_I444:
@@ -1254,7 +1247,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
case SDL_PIXELFORMAT_NV21:
sourceType = GLES2_IMAGESOURCE_TEXTURE_NV21;
break;
#endif
case SDL_PIXELFORMAT_EXTERNAL_OES:
sourceType = GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES;
break;
@@ -1281,7 +1273,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
case SDL_PIXELFORMAT_RGBX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR;
break;
#ifdef SDL_HAVE_YUV
case SDL_PIXELFORMAT_IYUV:
case SDL_PIXELFORMAT_YV12:
case SDL_PIXELFORMAT_I444:
@@ -1293,7 +1284,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
case SDL_PIXELFORMAT_NV21:
sourceType = GLES2_IMAGESOURCE_TEXTURE_NV21;
break;
#endif
case SDL_PIXELFORMAT_EXTERNAL_OES:
sourceType = GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES;
break;
@@ -1305,7 +1295,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
ret = SetDrawState(data, cmd, sourceType, vertices);
if (texture != data->drawstate.texture) {
#ifdef SDL_HAVE_YUV
if (tdata->yuv) {
data->glActiveTexture(GL_TEXTURE2);
data->glBindTexture(tdata->texture_type, tdata->texture_v);
@@ -1320,7 +1309,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
data->glActiveTexture(GL_TEXTURE0);
}
#endif
if (texture->palette) {
GLES2_PaletteData *palette = (GLES2_PaletteData *)texture->palette->internal;
data->glActiveTexture(GL_TEXTURE1);
@@ -1334,7 +1322,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
}
if (cmd->data.draw.texture_scale_mode != tdata->texture_scale_mode) {
#ifdef SDL_HAVE_YUV
if (tdata->yuv) {
data->glActiveTexture(GL_TEXTURE2);
if (!SetTextureScaleMode(data, tdata->texture_type, texture->format, cmd->data.draw.texture_scale_mode)) {
@@ -1355,7 +1342,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
data->glActiveTexture(GL_TEXTURE0);
}
#endif
if (texture->palette) {
data->glActiveTexture(GL_TEXTURE1);
if (!SetTextureScaleMode(data, tdata->texture_type, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST)) {
@@ -1373,7 +1359,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
if (cmd->data.draw.texture_address_mode_u != tdata->texture_address_mode_u ||
cmd->data.draw.texture_address_mode_v != tdata->texture_address_mode_v) {
#ifdef SDL_HAVE_YUV
if (tdata->yuv) {
data->glActiveTexture(GL_TEXTURE2);
SetTextureAddressMode(data, tdata->texture_type, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
@@ -1388,7 +1373,6 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
data->glActiveTexture(GL_TEXTURE0);
}
#endif
if (texture->palette) {
data->glActiveTexture(GL_TEXTURE1);
SetTextureAddressMode(data, tdata->texture_type, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
@@ -1744,13 +1728,11 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
type = GL_UNSIGNED_BYTE;
break;
case SDL_PIXELFORMAT_INDEX8:
#ifdef SDL_HAVE_YUV
case SDL_PIXELFORMAT_IYUV:
case SDL_PIXELFORMAT_YV12:
case SDL_PIXELFORMAT_I444:
case SDL_PIXELFORMAT_NV12:
case SDL_PIXELFORMAT_NV21:
#endif
format = GL_LUMINANCE;
type = GL_UNSIGNED_BYTE;
break;
@@ -1785,10 +1767,8 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
#endif
data->pixel_format = format;
data->pixel_type = type;
#ifdef SDL_HAVE_YUV
data->yuv = ((texture->format == SDL_PIXELFORMAT_IYUV) || (texture->format == SDL_PIXELFORMAT_YV12) || (texture->format == SDL_PIXELFORMAT_I444));
data->nv12 = ((texture->format == SDL_PIXELFORMAT_NV12) || (texture->format == SDL_PIXELFORMAT_NV21));
#endif
data->texture_scale_mode = texture->scaleMode;
data->texture_address_mode_u = SDL_TEXTURE_ADDRESS_CLAMP;
data->texture_address_mode_v = SDL_TEXTURE_ADDRESS_CLAMP;
@@ -1798,7 +1778,6 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
size_t size;
data->pitch = texture->w * SDL_BYTESPERPIXEL(texture->format);
size = (size_t)texture->h * data->pitch;
#ifdef SDL_HAVE_YUV
if (data->yuv) {
// Need to add size for the U and V planes
if (texture->format == SDL_PIXELFORMAT_I444) {
@@ -1810,7 +1789,6 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
// Need to add size for the U/V plane
size += 2 * ((texture->h + 1) / 2) * ((data->pitch + 1) / 2);
}
#endif
data->pixel_data = SDL_calloc(1, size);
if (!data->pixel_data) {
SDL_free(data);
@@ -1826,7 +1804,6 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
data->texel_size[2] = texture->w;
data->texel_size[3] = texture->h;
#ifdef SDL_HAVE_YUV
if (data->yuv) {
int yuv_texture_w, yuv_texture_h;
if (texture->format == SDL_PIXELFORMAT_I444) {
@@ -1918,7 +1895,6 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
return SDL_SetError("Unsupported YUV colorspace");
}
}
#endif
data->texture = (GLuint)SDL_GetNumberProperty(create_props, SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER, 0);
if (data->texture) {
@@ -2029,7 +2005,6 @@ static bool GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, co
tdata->pixel_type,
pixels, pitch, SDL_BYTESPERPIXEL(texture->format));
#ifdef SDL_HAVE_YUV
if (tdata->yuv) {
if (texture->format == SDL_PIXELFORMAT_I444) {
// Skip to the correct offset into the next texture
@@ -2097,12 +2072,10 @@ static bool GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, co
GL_UNSIGNED_BYTE,
pixels, 2 * ((pitch + 1) / 2), 2);
}
#endif
return GL_CheckError("glTexSubImage2D()", renderer);
}
#ifdef SDL_HAVE_YUV
static bool GLES2_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -2211,7 +2184,6 @@ static bool GLES2_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
return GL_CheckError("glTexSubImage2D()", renderer);
}
#endif
static bool GLES2_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect,
void **pixels, int *pitch)
@@ -2271,14 +2243,12 @@ static void GLES2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
if (tdata->texture && !tdata->texture_external) {
data->glDeleteTextures(1, &tdata->texture);
}
#ifdef SDL_HAVE_YUV
if (tdata->texture_v && !tdata->texture_v_external) {
data->glDeleteTextures(1, &tdata->texture_v);
}
if (tdata->texture_u && !tdata->texture_u_external) {
data->glDeleteTextures(1, &tdata->texture_u);
}
#endif
SDL_free(tdata->pixel_data);
SDL_free(tdata);
texture->internal = NULL;
@@ -2403,10 +2373,8 @@ static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
renderer->DestroyPalette = GLES2_DestroyPalette;
renderer->CreateTexture = GLES2_CreateTexture;
renderer->UpdateTexture = GLES2_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = GLES2_UpdateTextureYUV;
renderer->UpdateTextureNV = GLES2_UpdateTextureNV;
#endif
renderer->LockTexture = GLES2_LockTexture;
renderer->UnlockTexture = GLES2_UnlockTexture;
renderer->SetRenderTarget = GLES2_SetRenderTarget;
@@ -2465,13 +2433,11 @@ static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_INDEX8);
#ifdef SDL_HAVE_YUV
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_I444);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21);
#endif
#ifdef GL_TEXTURE_EXTERNAL_OES
if (SDL_GL_ExtensionSupported("GL_OES_EGL_image_external")) {
data->GL_OES_EGL_image_external_supported = true;

View File

@@ -341,7 +341,6 @@ static const char GLES2_Fragment_TextureABGR_PixelArt[] =
"}\n"
;
#ifdef SDL_HAVE_YUV
#define YUV_SHADER_PROLOGUE \
"uniform sampler2D u_texture;\n" \
@@ -474,7 +473,6 @@ static const char GLES2_Fragment_TextureNV21_RG[] =
YUV_SHADER_PROLOGUE
NV21_RG_SHADER_BODY
;
#endif
// Custom Android video format texture
static const char GLES2_Fragment_TextureExternalOES_Prologue[] =
@@ -578,7 +576,6 @@ const char *GLES2_GetShader(GLES2_ShaderType type)
return GLES2_Fragment_TextureABGR;
case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_PIXELART:
return GLES2_Fragment_TextureABGR_PixelArt;
#ifdef SDL_HAVE_YUV
case GLES2_SHADER_FRAGMENT_TEXTURE_YUV:
return GLES2_Fragment_TextureYUV;
case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RA:
@@ -589,7 +586,6 @@ const char *GLES2_GetShader(GLES2_ShaderType type)
return GLES2_Fragment_TextureNV21_RA;
case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RG:
return GLES2_Fragment_TextureNV21_RG;
#endif
case GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES:
return GLES2_Fragment_TextureExternalOES;
default:

View File

@@ -53,13 +53,11 @@ typedef enum
GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_PIXELART,
GLES2_SHADER_FRAGMENT_TEXTURE_ABGR,
GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_PIXELART,
#ifdef SDL_HAVE_YUV
GLES2_SHADER_FRAGMENT_TEXTURE_YUV,
GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RA,
GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RG,
GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RA,
GLES2_SHADER_FRAGMENT_TEXTURE_NV21_RG,
#endif
// Shaders beyond this point are optional and not cached at render creation
GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES,
GLES2_SHADER_COUNT

View File

@@ -208,10 +208,8 @@ static bool VITA_GXM_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window,
renderer->SupportsBlendMode = VITA_GXM_SupportsBlendMode;
renderer->CreateTexture = VITA_GXM_CreateTexture;
renderer->UpdateTexture = VITA_GXM_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = VITA_GXM_UpdateTextureYUV;
renderer->UpdateTextureNV = VITA_GXM_UpdateTextureNV;
#endif
renderer->LockTexture = VITA_GXM_LockTexture;
renderer->UnlockTexture = VITA_GXM_UnlockTexture;
renderer->SetRenderTarget = VITA_GXM_SetRenderTarget;
@@ -299,10 +297,8 @@ static bool VITA_GXM_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
texture->internal = vita_texture;
#ifdef SDL_HAVE_YUV
vita_texture->yuv = ((texture->format == SDL_PIXELFORMAT_IYUV) || (texture->format == SDL_PIXELFORMAT_YV12));
vita_texture->nv12 = ((texture->format == SDL_PIXELFORMAT_NV12) || (texture->format == SDL_PIXELFORMAT_NV21));
#endif
return true;
}
@@ -340,11 +336,9 @@ static bool VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
Uint8 *dst;
int row, length, dpitch;
#ifdef SDL_HAVE_YUV
if (vita_texture->yuv || vita_texture->nv12) {
VITA_GXM_SetYUVProfile(renderer, texture);
}
#endif
VITA_GXM_LockTexture(renderer, texture, rect, (void **)&dst, &dpitch);
length = rect->w * SDL_BYTESPERPIXEL(texture->format);
@@ -359,7 +353,6 @@ static bool VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
}
}
#ifdef SDL_HAVE_YUV
if (vita_texture->yuv) {
Uint8 *Udst;
Uint8 *Vdst;
@@ -421,13 +414,11 @@ static bool VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
}
}
}
#endif
data->drawstate.texture = NULL;
return true;
}
#ifdef SDL_HAVE_YUV
static bool VITA_GXM_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -561,7 +552,6 @@ static bool VITA_GXM_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *textur
return true;
}
#endif
static bool VITA_GXM_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)

View File

@@ -2661,7 +2661,6 @@ static bool VULKAN_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, S
}
texture->internal = textureData;
#ifdef SDL_HAVE_YUV
// YUV textures must have even width and height. Also create Ycbcr conversion
if (texture->format == SDL_PIXELFORMAT_YV12 ||
texture->format == SDL_PIXELFORMAT_IYUV ||
@@ -2789,7 +2788,6 @@ static bool VULKAN_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, S
return false;
}
}
#endif
textureData->width = width;
textureData->height = height;
@@ -2841,7 +2839,6 @@ static void VULKAN_DestroyTexture(SDL_Renderer *renderer,
VULKAN_DestroyImage(rendererData, &textureData->mainImage);
#ifdef SDL_HAVE_YUV
if (textureData->samplerYcbcrConversion != VK_NULL_HANDLE) {
vkDestroySamplerYcbcrConversionKHR(rendererData->device, textureData->samplerYcbcrConversion, NULL);
textureData->samplerYcbcrConversion = VK_NULL_HANDLE;
@@ -2858,7 +2855,6 @@ static void VULKAN_DestroyTexture(SDL_Renderer *renderer,
vkDestroyDescriptorSetLayout(rendererData->device, textureData->descriptorSetLayoutYcbcr, NULL);
textureData->descriptorSetLayoutYcbcr = VK_NULL_HANDLE;
}
#endif
VULKAN_DestroyBuffer(rendererData, &textureData->stagingBuffer);
if (textureData->mainFramebuffer != VK_NULL_HANDLE) {
@@ -2967,7 +2963,6 @@ static bool VULKAN_UpdateTextureInternal(VULKAN_RenderData *rendererData, VkImag
return true;
}
#ifdef SDL_HAVE_YUV
static bool VULKAN_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -2978,7 +2973,6 @@ static bool VULKAN_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture
const Uint8 *Yplane, int Ypitch,
const Uint8 *Uplane, int Upitch,
const Uint8 *Vplane, int Vpitch);
#endif
static bool VULKAN_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, const void *srcPixels,
@@ -2991,7 +2985,6 @@ static bool VULKAN_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
return SDL_SetError("Texture is not currently available");
}
#ifdef SDL_HAVE_YUV
Uint32 numPlanes = VULKAN_VkFormatGetNumPlanes(textureData->mainImage.format);
if (numPlanes == 2) {
// NV12/NV21 data
@@ -3025,14 +3018,12 @@ static bool VULKAN_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
}
}
}
#endif
if (!VULKAN_UpdateTextureInternal(rendererData, textureData->mainImage.image, textureData->mainImage.format, 0, rect->x, rect->y, rect->w, rect->h, srcPixels, srcPitch, &textureData->mainImage.imageLayout)) {
return false;
}
return true;
}
#ifdef SDL_HAVE_YUV
static bool VULKAN_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect,
const Uint8 *Yplane, int Ypitch,
@@ -3095,7 +3086,6 @@ static bool VULKAN_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
}
return true;
}
#endif
static bool VULKAN_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
const SDL_Rect *rect, void **pixels, int *pitch)
@@ -4652,10 +4642,8 @@ static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SD
renderer->DestroyPalette = VULKAN_DestroyPalette;
renderer->CreateTexture = VULKAN_CreateTexture;
renderer->UpdateTexture = VULKAN_UpdateTexture;
#ifdef SDL_HAVE_YUV
renderer->UpdateTextureYUV = VULKAN_UpdateTextureYUV;
renderer->UpdateTextureNV = VULKAN_UpdateTextureNV;
#endif
renderer->LockTexture = VULKAN_LockTexture;
renderer->UnlockTexture = VULKAN_UnlockTexture;
renderer->SetRenderTarget = VULKAN_SetRenderTarget;
@@ -4720,7 +4708,6 @@ static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SD
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_INDEX8);
#ifdef SDL_HAVE_YUV
if (rendererData->supportsKHRSamplerYCbCrConversion) {
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV);
@@ -4731,7 +4718,6 @@ static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SD
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_I0FL);
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_I4FL);
}
#endif
return true;
}

View File

@@ -26,7 +26,6 @@
#include "yuv2rgb/yuv_rgb.h"
#ifdef SDL_HAVE_YUV
static bool IsPlanar1x1Format(SDL_PixelFormat format)
{
return format == SDL_PIXELFORMAT_I444 || format == SDL_PIXELFORMAT_I4FL;
@@ -46,7 +45,6 @@ static bool IsPacked4Format(Uint32 format)
{
return format == SDL_PIXELFORMAT_YUY2 || format == SDL_PIXELFORMAT_UYVY || format == SDL_PIXELFORMAT_YVYU;
}
#endif
/*
* Calculate YUV size and pitch. Check for overflow.
@@ -54,7 +52,6 @@ static bool IsPacked4Format(Uint32 format)
*/
bool SDL_CalculateYUVSize(SDL_PixelFormat format, int w, int h, size_t *size, size_t *pitch)
{
#ifdef SDL_HAVE_YUV
int sz_plane = 0, sz_plane_chroma = 0, sz_plane_packed = 0;
if (IsPlanar1x1Format(format)) {
@@ -100,7 +97,7 @@ bool SDL_CalculateYUVSize(SDL_PixelFormat format, int w, int h, size_t *size, si
}
sz_plane_chroma = (int)s3;
}
} else {
} else if (IsPacked4Format(format)) {
/* sz_plane_packed == ((w + 1) / 2) * h; */
size_t s1, s2;
if (!SDL_size_add_check_overflow(w, 1, &s1)) {
@@ -111,6 +108,8 @@ bool SDL_CalculateYUVSize(SDL_PixelFormat format, int w, int h, size_t *size, si
return SDL_SetError("width * height would overflow");
}
sz_plane_packed = (int) s2;
} else {
return SDL_Unsupported();
}
switch (format) {
@@ -189,9 +188,6 @@ bool SDL_CalculateYUVSize(SDL_PixelFormat format, int w, int h, size_t *size, si
}
return true;
#else
return SDL_Unsupported();
#endif
}
#ifdef SDL_HAVE_YUV